<?php
/*
 * Quark PHP Framework
 * Copyright 2011, Sahib Alejandro Jaramillo Leo.
 * http://quarkphp.com/
 * Licensed under the GNU General Public License (http://www.gnu.org/licenses/gpl.html).
 */
/**
 * Definicion de clase SignedUser
 * @filesource
 */
/**
 * Clase para manipular los datos de sesion del usuario actual
 * @author sahib
 */
class SignedUser {

	/**
	 * Datos del usuario actual
	 * @var stdClass
	 */
	public $Data;

	/**
	 * Referencia al contenido de $_SESSION[<sess_name>]
	 * @see $config['sess_name']
	 * @var array
	 */
	protected $session;

	/**
	 * Constructor
	 * @return SignedUser
	 */
	public function __construct( ) {

		if( !isset( $_SESSION ) )
			session_start( );
		
		$this->session = &$_SESSION[Config::get( 'sess_name' )];
		
		/*
		 * Crear datos de usuario vacios si no existe
		 */
		if( $this->session == NULL )
			$this->session = array( 
				'access_level' => 0, 
				'data' => new stdClass( ) 
			);
		
		$this->Data = $this->session['data'];
	}

	/**
	 * Establece los datos del usuario actual
	 * 
	 * @param stdClass $Data datos del usuario
	 * @return SignedUser $this para hacer linking
	 */
	public function setData( stdClass $Data ) {

		$this->session['data'] = $this->Data = $Data;
		return $this;
	}

	/**
	 * Establece al usuario como si no estuviera firmado.
	 */
	public function kill( ) {

		$this->setData( new stdClass( ) )
			->setAccessLevel( );
	}

	/**
	 * Establece el nivel de acceso del usuario.
	 * @param int $access_level nuevo nivel de acceso, por default es 0 (cero)
	 * @return SignedUser $this para hacer linking
	 */
	public function setAccessLevel( $access_level = 0 ) {

		$this->session['access_level'] = $access_level;
		return $this;
	}

	/**
	 * Obtener nivel de acceso del usuario
	 * @return int nivel de acceso
	 */
	public function getAccessLevel( ) {

		return $this->session['access_level'];
	}
}